package com.springboot.jdk.nio;

import java.nio.ByteBuffer;

/**
 * Buffer Demo案例实战
 *
 * @author: zr
 * @date: 2021-10-19
 */
public class BufferDemo {

    public static void main(String[] args) {

        byte[] bytes = new byte[]{55, 56, 57, 58, 59};

        // 将java虚拟机内存里面的数据封装到Buffer 缓冲区里面去
        ByteBuffer wrap = ByteBuffer.wrap(bytes);

        // 第一种创建缓冲区的方式：本身就会创建一个包含空数组的Buffer缓冲区
        // 本质内部会创建一个大小为10的空数组
        //比较使用于从磁盘数据读取数据，或者从网络里面读取数据
        // 读数据的时候，先分配出来一个缓冲区
        // ByteBuffer allocate = ByteBuffer.allocate(10);

        // 第二种创建缓冲区的方式:Direct模式
        // 通过Direct模式分配的Buffer，比普通模式稍微高一些
        ByteBuffer.allocateDirect(10);

        // 5
        System.out.println(wrap.capacity());

        wrap.limit(4);

        System.out.println(wrap.limit());


        // 0
        System.out.println(wrap.position());
        // 5
        System.out.println(wrap.limit());

        // 0
        System.out.println(wrap.get());
        // 1
        System.out.println(wrap.position());
        wrap.mark();

        // // 5
        // System.out.println(wrap.limit());

        wrap.position(3);
        // 3
        System.out.println(wrap.get());
        // 4
        System.out.println(wrap.position());

        wrap.reset();

        System.out.println(wrap.position());


    }
}
